"""
Interfaces for Continual Learning Learners

This module provides abstract interfaces for different aspects of continual learning,
following the Interface Segregation Principle and Single Responsibility Principle.
"""

from .lifecycle import LifecycleManager, TaskStateManager, ConfigurationManager
from .memory import MemoryManager, ExemplarSelector, MemoryStrategy, ClassMeanManager
from .model import (
    ModelManager,
    NetworkStateManager,
    ModelArchitectureAdapter,
    FeatureProcessor,
)
from .training import (
    TrainingManager,
    OptimizerFactory,
    SchedulerFactory,
    LossFactory,
    TrainingStrategy,
)
from .evaluation import (
    EvaluationManager,
    AccuracyCalculator,
    MetricsEvaluator,
    CovarianceAnalyzer,
)
from .event import EventEmitter, EventManager, EventHandler, EventType, EventContext
from .multi_gpu import (
    MultiGPUManager,
    MultiGPUStrategy,
    DeviceManager,
    DistributedTrainingManager,
)
from .base_learner import (
    BaseLearnerInterface,
    IncrementalLearner,
    TaskAwareLearner,
    TaskAgnosticLearner,
    MetaLearner,
    RehearsalBasedLearner,
    RegularizationBasedLearner,
    ArchitecturalLearner,
)

__all__ = [
    # Lifecycle interfaces
    "LifecycleManager",
    "TaskStateManager",
    "ConfigurationManager",
    # Memory interfaces
    "MemoryManager",
    "ExemplarSelector",
    "MemoryStrategy",
    "ClassMeanManager",
    # Model interfaces
    "ModelManager",
    "NetworkStateManager",
    "ModelArchitectureAdapter",
    "FeatureProcessor",
    # Training interfaces
    "TrainingManager",
    "OptimizerFactory",
    "SchedulerFactory",
    "LossFactory",
    "TrainingStrategy",
    # Evaluation interfaces
    "EvaluationManager",
    "AccuracyCalculator",
    "MetricsEvaluator",
    "CovarianceAnalyzer",
    # Event interfaces
    "EventEmitter",
    "EventManager",
    "EventHandler",
    "EventType",
    "EventContext",
    # Multi-GPU interfaces
    "MultiGPUManager",
    "MultiGPUStrategy",
    "DeviceManager",
    "DistributedTrainingManager",
    # Base learner interfaces
    "BaseLearnerInterface",
    "IncrementalLearner",
    "TaskAwareLearner",
    "TaskAgnosticLearner",
    "MetaLearner",
    "RehearsalBasedLearner",
    "RegularizationBasedLearner",
    "ArchitecturalLearner",
]
